package fr.afcepf.al23.qualite.dataimpl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import fr.afcepf.al23.qualite.data.IDaoUtilisateur;
import fr.afcepf.al23.qualite.entity.Utilisateur;

/**
 * Implementation des methodes liees a l'utilisateur.
 * @author Stagiaire
 *
 */
public class DaoUtilisateurImpl implements IDaoUtilisateur {

    /**
     * DataSource al23_qualite.
     */
    private DataSource ds = new QualiteDataSource();
    /**
     * Requete pour la connection.
     */
    private final String reqConnection = "SELECT * FROM Utilisateur WHERE mail = ? AND mdp = ?";
    /**
     * indice Mail Connection.
     */
    private final int indiceParamMailReqConnect = 1;
    /**
     * indice Mdp Connection.
     */
    private final int indiceParamMdpReqConnect = 2;
    /**
     * indice ID Create.
     */
    private final String colonneId = "id";
    /**
     * indice Nom Create.
     */
    private final String colonneNom = "nom";
    /**
     * indice Mail Create.
     */
    private final String colonneMail = "mail";
    /**
     * indice Mdp Create.
     */
    private final String colonneMdp = "mdp";
    /**
     * indice Adresse Create.
     */
    private final String colonneAdresse = "adresse";
    @Override
    public Utilisateur seConnecter(String paramMail, String paramMdp) {
        Utilisateur user = null;
        Connection cnx = null;
        try {
             cnx = ds.getConnection();
             PreparedStatement pstmt = cnx.prepareStatement(reqConnection);
             pstmt.setString(indiceParamMailReqConnect, paramMail);
             pstmt.setString(indiceParamMdpReqConnect, paramMdp);
             ResultSet rs = pstmt.executeQuery();
             if (rs.next()) {
                 user = rsToUtilisateur(rs);
             }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
        cnx.close();
        } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return user;
    }

    /**
     * @param paramRs {@link Utlisateur}.
     * @return Utilisateur.
     * @throws SQLException {@link ResultSet}.
     */
    private Utilisateur rsToUtilisateur(ResultSet paramRs) throws SQLException {
       Utilisateur user = new Utilisateur(
               paramRs.getInt(colonneId),
               paramRs.getString(colonneNom),
               paramRs.getString(colonneMail),
               paramRs.getString(colonneMdp),
               paramRs.getString(colonneAdresse)
               );
        return user;
    }

    @Override
    public Utilisateur enregistrer(Utilisateur paramUtil) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public boolean verifMail(String paramMail) {
        // TODO Auto-generated method stub
        return false;
    }

}
